#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include "listaligada.h"

void InicializaLista(TipoLista *L) {
    *L = NULL;
}


int InsereLista(TipoLista *L, TipoItem I, int *qtPalavras) {
    Apontador aux, aux1;

    aux = (Apontador) malloc(sizeof(TipoNo));
    aux1 = (Apontador) malloc(sizeof(TipoNo));
    if (aux == NULL || aux1 == NULL){
        printf("Erro: Memoria nao disponivel\n");
		exit(1);
	}

	aux1->Item = I;
	aux1->prox = NULL;
	aux = *L;

	//Lista vazia
	if(*L==NULL){		
		*L=aux1;
		*qtPalavras = *qtPalavras+1;
		//printf("Palavra inserida: %s\n", aux1->Item.Chave);
	}
	else{
		while(aux->prox!=NULL){
			if(strcmp(aux1->Item.Chave, aux->Item.Chave)==0)
				return 0;
			if(strcmp(aux1->Item.Chave, aux->prox->Item.Chave)==0)
				return 0;
			aux=aux->prox;
		}
		aux->prox=aux1;
		*qtPalavras = *qtPalavras+1;
		//printf("Palavra inserida: %s\n", aux1->Item.Chave);
	}
}

/*
int InsereLista(TipoLista *L, TipoItem I, int **qtPalavras) {
    Apontador aux;

    aux = (Apontador) malloc(sizeof(TipoNo));
    if (aux == NULL)
        printf("Erro: Memoria nao disponivel\n");
    aux->Item = I;
    aux->prox = *L;
    *L = aux;
		**qtPalavras = **qtPalavras+1;
return 0;
}
*/

Apontador PesquisaLista(TipoLista *L, TipoChave C) {
    Apontador aux;

    aux = *L;
    while (aux != NULL) {
        if (strcmp(aux->Item.Chave, C) == 0)
            return aux;
        aux = aux->prox;
    }
    return NAO_ENCONTRADO;
}

void RemoveLista(TipoLista *L, Apontador P) {
    Apontador aux;

    if (*L == NULL)
        printf("Erro: Lista vazia");
    else {
        if (P == *L) {
            *L = P->prox;
            free(P);
        } else {
            aux = *L;
            while (aux != NULL && aux->prox != P)
                aux = aux->prox;
            if (aux == NULL)
                printf("Erro: Posicao invalida");
            else {
                aux->prox = P->prox;
                free(P);
            }
        }
    }
}

void RecuperaLista(TipoLista *L, Apontador P, TipoItem *I) {
    if (P == NULL)
        printf("Erro: posicao invalida");
    else
        *I = P->Item;
}
